А ещё не поленюсь тебе скинуть карту близов, из которой тоже можно учесть несколько простых и хороших уроков
Также на форму выложена открытая дота, можно дергать все что хочется и изучать, надеюсь тебе поможет и ты разберешся
Чтобы иметь и модель с обычной текстурой и с другой, с помощью программы для извлечения моделей из Warcraft 3 (я пользуюсь обычно Warcraft 3 Viewer, поищи на сайте), там ищешь справа в папках твою модель, извлекаешь её к себе на компьютер.
Потом открываешь программой mdlvis (основная программа для моделлинга, тоже здесь есть) модель, сразу выделяешь её и нажимаешь кнопку UV-карты или модули - редактор текстур.
Внизу есть путь для текстуры, измени на название скачанной. Нажми enter, сохрани модель.
Если текстура специально для той модели, переходи к следующему пункту.
Кинь текстуру и модель в папку с вариком и открывай WE. У тебя стандартная модель и модель с другой текстурой.
Возможно, звучит сложно, но я привык, несколько кликов - и текстура изменена.
ну вот в чём твоя ошибка: Ты изменил название текстуры, а значит ты изменил и пути, тебе нужно зайти в war3modelEditor и там уже открыв модель выбрать вкладку: Windows=>Texture Manager, где будет список текстур, ты удаляешь 1 старую текстуру, которая у тебя была и добавляешь новую, при этом модель с текстурой должны лежать в одной папке, которая не содержит кириллицы (например путь должен быть d:\Users\User\Desktop\moroz - без русских букв ).
Переименовать новую текстуру на старую по идее не имеет смысла, потому что опять же ты сохранил её без текстуры, а => испоганил, накосячил, сломал (называй как хочешь).
Melissa, заменяемая текстура дерева работает так:
создаём слот "none", редактируем его — вписываем ИД.
Соответственно, нужно просто добавить нормальную текстуру. Там уже можно будет настраивать материалы и удалять ненужные.
Решения не было найдено! Самый верный способ сделать свою систему улучшений для юнитов, разбивая их на группы по признаку кол-ва грани у кости и кол-во костей, и в зависимости от этого повышать урон
Никак, очень сложное заклинание (близзарды пряма изощрялись и собирали совещание, как бы это сделать посложнее - Dracolich(c))
Там бафф по сути триггер с особым событием которое запилили специально для этой способности - юнит потерял ману от каста заклинания, до него можно добраться с помощью мемхака - но костыльно и сложно.
Баши и криты можно отловить косвенно, по получению урона \баффа. Но это ненадежный способ, атака обрабатывается в момент замаха и движок узже знает попадет юнит или промажет, забашит или кританет по цели, еще за долго до самого удара. Поэтому самый рациональный способ - триггерные аналоги этих пассивок - крит, ну тупо перед атакой вручает абилку крита со 100% шансом и усе, баш так же. Особо изворотливые могут сделать детект физического урона и сделать баш из дамми каста молотка бурь (нам же надо только отловить сам факт удара) ну а крит посложнее, но тоже вполне реализуемо.
Собственные попытки в студию, что не получается?
Напомним - ЭТО НЕ СТОЛ ЗАКАЗОВ, здесь задают вопросы про реализацию тех или иных вопросов, спрашивают про ошибки, оптмизацию, отдельные функции. Я не увидел в вашем вопросе ничего кроме невнятного описания механики способности, " вокргу кого то там огненные столбы возникают, и еще порча"...
Filius Dei, во вредные советы подъехали...
Русификатор очень поможет тем кто собрался ломануть чужую карту и сделать её мод, прям ваще жир...
Потом нубам вроде сударя не стоит бежать ломать чужую карту, чето там пытатся копировать - это все бесполезно, недавно был похожий вопрос - помогите взломать карту за вознаграждение, карту сломали - ну а дальше что? Он неспособен ничего сделать потому что просто не понимает как?
Играя в некую карту вы мните себя великими балансерами и картоделами, мол да чё там, шяс подправлю пару значений и все будет норм - нет не будет, это не так просто как может показаться, без понимания устройства карты и знания Jass вам нечего там делать, вы тупо ничего не сможете изменить, да даже скопировать и вставить!
Помните что без труда не выловишь и рыбку из пруда, т.е изи способов в 1 кнопку взять и запилить чужую карту так как вам хочется или вдруг стащить всех героев себе в карту нет, а уж теболее не случится так что вам кто то возьмет и все это сделает вам за спасибо...
nvc123, ну так потому я и подписался как Кэп. Просто тема почему-то до сих пор не закрыта, вот я и подумал, что твой ответ не понятен. Ибо, уложить такую формулировку в одно слово - это, конечно, мастерство :)
если это каст который не сбивает приказ то нужно безумие юзать либо сохранять приказ (теряется последовательность)
если же это скилл который имеет малое время каста то либо просто настроить скорости каста/анимации либо делать как сказал ссср Starman2222, для новичков у нас есть вот это
прочти разделы 1 и 2 и научись внятно объяснять что тебе нужно
потом возвращайся
Ну как сказать, юнит является юнитом секунды 3 после смети (или сколько там установлено время смерти), потом его уже нету на карте, поэтому можно и не искать, но герои сидят в памяти пока их не удалят, в отличии от обычных юнитов, но всеравно их уже не существует в понимании движка на уровне бегающих и дерущихся юнитов.
Не удивительно, кто так делает?
Никаких вейтов в гуппах использовать нельзя, что за глупость! Для задержек существуют таймеры!
Слишком низкое время жизни дамми юнита, ставь секунд 5, то рисукуешь убить юнита неизвестно кем.
Ты не даешь видимость и не создаешь даммика за нейтрально пассивных, а зря! Даммик может не удивить в кого ему кинуть корни, цель можеть быть в тумане войны.
Чтобы кинуть корни в случайных юнитов в радиусе, есть особое дейстие GroupPickRandomUnit().
Спелл нужно переписать с 0, так же удалить русс. триггеры!
Не нашёл способа как отредактировать модель. Вообще данный юнит у меня под locust'ом поэтому принял решением для себя следующее:
триггерное увеличение юнита в 9999 раз. Партиклы исчезают :)
(если уменьшать размер до 0 - их видно)
Эмм что за ерунда, сократил код, убрав всё лишнее, но утечки все равно остаются, по 1.5 - 2 хэндла за каждое нанесение урона (тип хэндла не знаю как посмотреть). Когда триггер отключаешь, то всё нормально.
Сокращенный код
function SDMSCreateTextTag takes nothing returns nothing
local unit u=GetTriggerUnit()
local unit s=GetEventDamageSource()
local integer i=GetConvertedPlayerId(GetOwningPlayer(u))
local texttag tt=CreateTextTag()
local real dmg=GetEventDamage()
if ( dmg > 1.00 ) and ( dmg < 9999.00 ) then
if GetPlayerId(GetOwningPlayer(u))==12 then
call SetTextTagText(tt, "|cff9db9eb-"+I2S(R2I(dmg))+"|r", 0.023)
else
call SetTextTagText(tt, "|cffffa500-"+I2S(R2I(dmg))+"|r", 0.023)
endif
call SetTextTagPosUnit(tt, u, 0)
call SetTextTagColor(tt, 255, 255, 255, 255)
call SetTextTagVelocity(tt, 0.05325*Cos(90 * bj_DEGTORAD), 0.05325*Sin(90 * bj_DEGTORAD))
call SetTextTagPermanent(tt, false)
call SetTextTagLifespan(tt, 1.0)
call SetTextTagFadepoint(tt, 0.0)
endif
call PolledWait(2.0)
call DestroyTextTag(tt)
set u=null
set s=null
set i=0
set dmg=0
set tt=null
endfunction
function SDMSTriggerRegisterUnitDamaged takes nothing returns nothing
call TriggerRegisterUnitEvent(udg_SDMStrigger,GetEnteringUnit(),EVENT_UNIT_DAMAGED)
endfunction
function theSDMSTriggerActions takes nothing returns nothing
local trigger UnitEnter=CreateTrigger()
call TriggerRegisterEnterRectSimple(UnitEnter, gg_rct_Arena)
call TriggerAddAction(UnitEnter,function SDMSTriggerRegisterUnitDamaged)
set UnitEnter=null
endfunction
function InitTrig_the_SDMS_Trigger takes nothing returns nothing
local trigger tr=CreateTrigger()
set udg_SDMStrigger=CreateTrigger()//Тут также меняется название глобальной переменной типа триггер.
call TriggerAddAction(udg_SDMStrigger,function SDMSCreateTextTag)
call TriggerRegisterTimerEventSingle(tr,0.0)
call TriggerAddAction(tr,function theSDMSTriggerActions)
set tr=null
endfunction
Wait вызывает утечки ((
Пришлось делать через таймер
Решения не было найдено! Самый верный способ сделать свою систему улучшений для юнитов, разбивая их на группы по признаку кол-ва грани у кости и кол-во костей, и в зависимости от этого повышать урон
VovkaShyt, будет, хоть 10 хоть 0,01 будет снижаться количеством брони, а эти параметры - снижение от типа брони, сила тьмы игнорирует тип брони, а вот атака героя не игнорирует тип защиты зданий, здания, вспомните как долго в мили картах ломаются здания.
local real x = GetRandomReal(GetRectMinX(GetPlayableMapRect()), GetRectMaxX(GetPlayableMapRect()))
local real y = GetRandomReal(GetRectMinY(GetPlayableMapRect()), GetRectMaxY(GetPlayableMapRect()))
...
(действия с координатами)
...
Любые действия с локейшном можно переделать под координаты, если не используется z-координата, как сказано выше. Но z-координату используют не только лишь все, мало кто может это делать.
И обнулять ничего не придётся, так как действительное число не утекает.
кхе, всё вроде можно, но объяснять долго, третье простое, просто при юзании способности в триггерах добавь условие сравнения, если юнит цель применяемой способности нежить, тогда действие о дополнительном уроне, например если способность наносит 100, то 20% это 20,в действии приказать применяющий юнит нанести урон юнит цель применяемой способности 100+(0.20х100), перед этим 100 можно установить, как переменную, например если с каждым уровнем урон растёт на 100, то переменная int=100хУровень способности способность у применяющий юнит.
Сложно объяснил?
Немного теории. В подобных моделях используются тэги ("upgrade first", "upgrade second"). На разных уровнях улучшения проигрываются анимации с разными тэгами. Виден один вариант здания, при этом остальные варианты невидимы.
В принципе, можно в настройках для разных юнитов выбрать разные модели, но если нужно именно всё в одной - можно обратиться за помощью в тему: xgm.guru/p/wc3/needmodels
Bariy vad, бред ZLOI_DED, джнгп сам выносит переменные в блок глобал ZLOI_DED, короче скрины с ошибкой и строкой на которую ругается в студию
В том то и ананас, что никто ни на что не ругается. Он просто берёт и не запускается. А всё что я сказал выше - мои наблюдения в сравнении.
Ещё важное замечание. JassHelper на старой карте сам выдаёт ошибки. На новых - херушки... Что за аншлаг? o_0
100% проблема в JassHelper'е! Не у меня одного такая фигня. На хайвворкшопе есть подобные темы, но там он хотя бы запускается, а у меня даже не запускается.
А я ландом занимался... не хотелось бы карту с нуля переделывать... Может есть у кого какие идеи?
UPD: Решилось установкой новой версии JassHelper и пересохранением карты через Сохранить как...
инструкции как таковой нет, могу описать, но здесь миллион примеров нужно, чтобы разжевать новичку (и случаи уникальны у каждого, и их очень много. Не знаю с чего начать). А вообще что там сложного? знаешь jass, и все. Тебе нужно знать является ли объект хэндл, и нужно ли его удалять (или побочная нативка удалит, как например у текстагов. Текстаги можно не удалять напрямую, есть у него функция, задающая время жизни. Текстаг сам исчезнет. Или вот фильтр удалять не обязательно, она не утекает). Все одинаково: нужно удалить объект (помню, у меня жестко мультиборд утекал, пока не узнал, что есть функция обновляющая ячейку, она еще дает не плодит новые). Поэтому нужно знать можно ли удалить (умирающего юнита например удалять не нужно, сам разложится. А вот например предметы как руны нужно, при подборе руны, руна остается в игре. Например, миллионы книжек в магазине, если игрок будет покупать миллионами, он будет плодить. Поэтому при получении удаляй сразу). Чистить содержимое в хэш-таблице, и обнулять локалки. Функции BJ могут утекать, там не обнуляют локалки. Раскрыть функции BJ, там где есть локалка не обнуленная подправить и др. Помню, хотел взять координаты от точки, там x и y. Я вызвал (создал) два раза точки, раньше не понимал, что создаю точки. Нужно найти альтернативные, что возвращают не точку, а координаты (реальные числа), например, юнита. Чтобы знать, это надо смотреть на сайте (попался необычный хэндл, вбиваешь в поиск). Тебе нужна библиотека всех функции и нативок. Очень удобная библиотека есть в jngp. Щас нубы очень не любят jngp, так как не отображает ошибки и не компилирует что-то. Так выключите плагин UMSWE, и Vjass и Cjass тоже выключите. Пользуйтесь библиотекой и новыми триггерными менюшками, доступны в hNGP без этого. Все придет с опытом, просто подольше посиди с кодом.
решил проблему костылём - дал возможность рабочему строить только башню - шаблонку, которая в свою очередь может улучшаться в две указанные башни. Взаимосвязь поставить только от башни - шаблонки. Лимит поставил на башню шаблонки.
Но тема не закрыта. Хотелось бы узнать можно ли решить проблему без костылей.
Возможно нет строки триггера.
На сколько знаю в триггерах нет ограничений, по крайне мере с этим не сталкивался, но в переменных есть, какое количество не знаю, но я всё сжал у себя.
PT153, ну call просто вызываешь потоком (он не создает поток), например у тебя в ряд выставлены сверху вниз названия функции со скобочками (и внутри скобок аргументы, а если не берет никаких аргументов, то внутри скобок пусто) и через call вызывает одну за другой последовательно сверху вниз.
call название функции (аргументы)
Допустим первую верхнюю функцию вызвали, и ее обработали, потом поток берет вторую внизу функцию и обрабатывает и т.д. Но у потока есть ограничения в операциях, как только выполнится определенное количество операций, варкрафт экстренно завершает поток и даже не сообщает об этом.
call функция 1()
call функция 2()
......
call функция 999()
Тут хочу обратить внимание и на то, насколько длинный код в этой вызываемой функции. И сколько вызываемой работы потребует: всякие вычисления, бесконечные циклы и другое. Если длинный код у тебя, и кучу циклов, и сами циклы большую работу совершают, то следует разбить на участки или как-то переделать что ли, уменьшить работу цикла и др.
Можно разбить на функции и ...
вызывать через call, но так делать не стоит. Поток вызывает эти функции последовательно.
Нужно делать задержку (через вэйт), например в ИИ-скриптах варкрафта делают задержку, чтобы не было нагрузки. Вместо вэйта можно таймер.
через ExecuteFunc, ExecuteFunc создает отдельный новый поток. информацию про ExecuteFunc скидывал выше.
GetLocalPlayer, Нет, на гуях мемхака, вовсе исключён...
Так же мемхак нужно еще заставить работать, если ваши познания jass ниже среднего, а так же вам лень читать статьи по 10 страниц - эта наработка явно не для вас.
ScopteRectuS, Я решил проблему там баг, если указать регион как точку назначения портала, то с ним триггеры перестают работать. Я просто указал другой регион. biridius, Ну это альфа версия, за 5 мин сделал, знаю об утечках.
Как вариант, сделать так, что бы модель была разбита на множество текстур которые раскиданы по самым дурацким путям. Ни какой картодел не будет вытаскивать такую модель, ни за что.
quq_CCCP, а можно поподробнее? И это защитит карту от инжекта?
Подробно - это сделай за меня?
Суть:
call BJDebugMsg( I2Sx( 100500 ) )
Выдаст разные значения в депротектнутой и нормальной картах, пока это теория но возьмите и проверьте. I2Sx - фольклорная функция ретурн бага, суть преобразует хеш от строки в строку. именно хеш а не инт. т.е адрес в таблице строк на строку. вот RetunrBug ( www.hiveworkshop.com/threads/accessing-memory-from-the-script-it... ) функция в либе Typecast - I2SH
Ну кароче проверил:
function Trig_J_Test_Actions takes nothing returns nothing
local integer i = 486
local string str = null
set str = S2S( I2SH( i ) )
call BJDebugMsg( str )
set str = null
endfunction
//===========================================================================
function InitTrig_J_Test takes nothing returns nothing
set gg_trg_J_Test = CreateTrigger( )
call TriggerRegisterPlayerEventEndCinematic( gg_trg_J_Test, Player(0) )
call TriggerAddAction( gg_trg_J_Test, function Trig_J_Test_Actions )
endfunction
При добавлении, удалении 3 функций сменяется строка по этому адресу, самое главное найти последнюю строку (ну или как я от балды ввел число) хотя я не уверен что прокатит с числом от балды, нужно найти последнюю строку на момент загрузки карты и смотреть её адрес, а после смотреть что будет записано по этому адресу в таблице строк.
Karp, Ой способов защиты 100500, щяс есть мемхак, я уже выкладывал пример как проверить вводились ли в код карты измненения.
Так же есть возможность писать код карты байткодами, которые внезапно низя прочитать или перевести в JASS это внутренние инстркции JASS машины. Но это достаточно сложно. Так же Можно загружать свои ДЛЛ, а это дает полный контроль над картой, можно зашифровать и сжать данные в архиве хер знает какими алгоритмами которые никогда не видел варкравт, а при загрузке срипта вызывать Дллку которая бы и расшифровывала это дело и вызывала функцию чтения архива + проверяла контрольную сумму архива (вроде в мемхаке была эта функция), контрульная сумма не та - выгружаем из ДЛЛ вирус, чтонить на подобии шифровальщиков. И читерам уже не до карты и варкравта в целом...
Это не для гуи новичков, придется долго морщить лоб и писать карту на jass + малость в с++ шарить.
Как вариант, сделать так, что бы модель была разбита на множество текстур которые раскиданы по самым дурацким путям. Ни какой картодел не будет вытаскивать такую модель, ни за что.
quq_CCCP, а можно поподробнее? И это защитит карту от инжекта?
Подробно - это сделай за меня?
Суть:
call BJDebugMsg( I2Sx( 100500 ) )
Выдаст разные значения в депротектнутой и нормальной картах, пока это теория но возьмите и проверьте. I2Sx - фольклорная функция ретурн бага, суть преобразует хеш от строки в строку. именно хеш а не инт. т.е адрес в таблице строк на строку. вот RetunrBug ( www.hiveworkshop.com/threads/accessing-memory-from-the-script-it... ) функция в либе Typecast - I2SH
Ну кароче проверил:
function Trig_J_Test_Actions takes nothing returns nothing
local integer i = 486
local string str = null
set str = S2S( I2SH( i ) )
call BJDebugMsg( str )
set str = null
endfunction
//===========================================================================
function InitTrig_J_Test takes nothing returns nothing
set gg_trg_J_Test = CreateTrigger( )
call TriggerRegisterPlayerEventEndCinematic( gg_trg_J_Test, Player(0) )
call TriggerAddAction( gg_trg_J_Test, function Trig_J_Test_Actions )
endfunction
При добавлении, удалении 3 функций сменяется строка по этому адресу, самое главное найти последнюю строку (ну или как я от балды ввел число) хотя я не уверен что прокатит с числом от балды, нужно найти последнюю строку на момент загрузки карты и смотреть её адрес, а после смотреть что будет записано по этому адресу в таблице строк.
Karp, Ой способов защиты 100500, щяс есть мемхак, я уже выкладывал пример как проверить вводились ли в код карты измненения.
Так же есть возможность писать код карты байткодами, которые внезапно низя прочитать или перевести в JASS это внутренние инстркции JASS машины. Но это достаточно сложно. Так же Можно загружать свои ДЛЛ, а это дает полный контроль над картой, можно зашифровать и сжать данные в архиве хер знает какими алгоритмами которые никогда не видел варкравт, а при загрузке срипта вызывать Дллку которая бы и расшифровывала это дело и вызывала функцию чтения архива + проверяла контрольную сумму архива (вроде в мемхаке была эта функция), контрульная сумма не та - выгружаем из ДЛЛ вирус, чтонить на подобии шифровальщиков. И читерам уже не до карты и варкравта в целом...
Это не для гуи новичков, придется долго морщить лоб и писать карту на jass + малость в с++ шарить.
Как вариант, сделать так, что бы модель была разбита на множество текстур которые раскиданы по самым дурацким путям. Ни какой картодел не будет вытаскивать такую модель, ни за что.
quq_CCCP, а можно поподробнее? И это защитит карту от инжекта?
Подробно - это сделай за меня?
Суть:
call BJDebugMsg( I2Sx( 100500 ) )
Выдаст разные значения в депротектнутой и нормальной картах, пока это теория но возьмите и проверьте. I2Sx - фольклорная функция ретурн бага, суть преобразует хеш от строки в строку. именно хеш а не инт. т.е адрес в таблице строк на строку. вот RetunrBug ( www.hiveworkshop.com/threads/accessing-memory-from-the-script-it... ) функция в либе Typecast - I2SH
Ну кароче проверил:
function Trig_J_Test_Actions takes nothing returns nothing
local integer i = 486
local string str = null
set str = S2S( I2SH( i ) )
call BJDebugMsg( str )
set str = null
endfunction
//===========================================================================
function InitTrig_J_Test takes nothing returns nothing
set gg_trg_J_Test = CreateTrigger( )
call TriggerRegisterPlayerEventEndCinematic( gg_trg_J_Test, Player(0) )
call TriggerAddAction( gg_trg_J_Test, function Trig_J_Test_Actions )
endfunction
При добавлении, удалении 3 функций сменяется строка по этому адресу, самое главное найти последнюю строку (ну или как я от балды ввел число) хотя я не уверен что прокатит с числом от балды, нужно найти последнюю строку на момент загрузки карты и смотреть её адрес, а после смотреть что будет записано по этому адресу в таблице строк.
Karp, Ой способов защиты 100500, щяс есть мемхак, я уже выкладывал пример как проверить вводились ли в код карты измненения.
Так же есть возможность писать код карты байткодами, которые внезапно низя прочитать или перевести в JASS это внутренние инстркции JASS машины. Но это достаточно сложно. Так же Можно загружать свои ДЛЛ, а это дает полный контроль над картой, можно зашифровать и сжать данные в архиве хер знает какими алгоритмами которые никогда не видел варкравт, а при загрузке срипта вызывать Дллку которая бы и расшифровывала это дело и вызывала функцию чтения архива + проверяла контрольную сумму архива (вроде в мемхаке была эта функция), контрульная сумма не та - выгружаем из ДЛЛ вирус, чтонить на подобии шифровальщиков. И читерам уже не до карты и варкравта в целом...
Это не для гуи новичков, придется долго морщить лоб и писать карту на jass + малость в с++ шарить.
Вот сделал карту пример, на которой все юниты кроме 2 исчезают, заносятся в отряд- переменную (у меня в событии истечение 10 секунд) и появляются только если умер герой, который подчиняется тебе..
пример простой, его можно настроить как тебе нужно, я только показал принцип. Если что будет непонятно - спрашивай)
Как это сделано у меня в страннике:
Есть области, 1 для каждого НПС,
Есть группа, куда записаны все НПС.
Есть таймер с периодичностью в 3 секунды. Каждый раз идет проверка. Проверятся, что НПС состоит в группе и если случайное число 0-100 меньше и равно 50, то НПС двигается в случайную точку в своей области.
Когда герой начинает говорить, НПС останавливает свой приказ, поворачивается к герою и удаляется из группы, чтобы когда таймер сработал он не убежал.
Соответственно когда разговор окончен, НПС снова добавляется в эту группу.
Все просто.
Эх, друг) ну я реализовал так. Есть в способностях замечательный закл перевоплащение иллидана. В нейтрально - враждебных. То есть ты создаешь двух героев у одного рэнжа 600 у другова 100 например, а этот спел меняет твоих героев местами(каждому там уже свои спец эффекты делаешь). Там есть еще у меха спел есть похожий, там без ограничения по времени, ну думаю идею ты понял.
Не понимаю в чем проблема. Подвисание происходит от того, что на карте впервые появляется тип юнита (со спецэффектами может быть тоже самое). Подвисание убрать невозможно, но можно сделать так, чтобы оно происходило в более подходящий момент. Конкретно — сразу после загрузки карты. Для этого создаем триггер, который при инициализации сделает следующее:
Создаст в недоступном месте даммика.
Даст ему все способности, которые даммик может получить в ходе игры.
Повысить все эти способности до максимального уровня.
Удалить дамми.
Какие тут могут быть проблемы в реализации? Не важно каким образом и при каких обстоятельствах вы будете использовать дамми после. Не способность нужно запустить, а просто создать даммика. Даммик вызвает лаг, а не способность из РО и не прочий код.
Патиссончик, про центр области не заметил
точка каждый раз создаётся заново и это утечка Патиссончик, есть прога на сайте для записи логов
так же есть дебаг через прелоад на сайте
вот счётчик утечек
Ну у мастера клинка способность то посложнее...
Вот пример:
Для начала нам нужно создать иллюзии героя, а потом скрыть всех их, так же сделав визуальный эффект (если что то зеленые тени, это снаряды).
Берем основную модель, возможно, вообще без мяса, только с гусеницами, но с кучей точек крепления. Также берем кучу моделей-аттачметов, представляющих собой эти самые пушки, корпуса и все прочее. При выборе характеристик модели через диалог или интерфейс соответственно создаем на основной модели эффекты-аттачменты, будет собрана техника. Такие штуки, как двигатель и прочие невидные извне элементы будут скорее входить в математическую модель юнита, но это также можно запилить. Название танка - сразу не скажу, есть ли триггер на смену, но на таблице рекордов можно отобразить что угодно.
2.Тоже можно.
Создаем погодный в определенной местности и делаем два триггера для контроля входа-выхода юнитов из нее. На искомых юнитов применяем нужные способности - и все готово.
Здесь чуть сложнее: нужно постоянно проверять тип местности под юнитом, но тоже можно. Проверка на ограждения тоже может бить сделана.
4.Это уже интереснее. Видел раньше подобное в играх. При каждой атаке юнита случайным образом наносим или не наносим доп. урон, эффект горения, кидаем спелл на цель в зависимости от теоретического места попадания атаки.
5.И это можно. Но нужно писать нестандартную систему Альянса. Но через триггеры и JASS все можно...
Продажа техники - лучше через способность, что бы кидать ее на понравившегося юнита, не стоит покупать кота в мешке. Стоимость должна зависеть от технического уровня юнита, его текущего состояния (мертвый танк попадет вам бесплатно, сами чините!), если он был модернизован дополнительно, то это тоже входит в стоимость. Разрешение на продажу делаем аналогично.
Это легко через Custom Value и переменние.
Как ты понял, все что ты предложил создать можно, но на это нужно потрать хороший кусок времени. Остается пожелать тебе удачи над созданием проекта - мне идея уже нравится.
Нашёл решение для тебя.
Пол-ночи провозился, но нашёл. почему-то это стало делом чести - открыть сию карту в редакторе
В общем, берёшь архив из аттача и тупо суёшь папку UI в корень варкрафта. После этого карта будет открываться любым вариантом редактора - как JNGP (любым), так и (даже!) стандартным.
Важно: локальные файлы должны быть разрешены.
Только там такой срач и дичь, что лучше реально своими руками с нуля писать...
Изучение и использование любого языка программирования - крайне интересный процесс, и JASS - далеко не самый плохой вариант для того, чтобы быть изученным первым =)
Но если изучать что-либо не хочется, то ищите исполнителя и просите у него определённого результата за соответствующее вознаграждение.
8gabriel8, довольно много. Разбиение на отдельные триггеры может помочь от проблем с лимитом операций, но если в этом коде нет циклов, то оно практически бессмысленно. Ради интереса можешь попробовать сохранить карту с конвертированными триггерами, вдруг причина в модуле редактора, который за отрисовку GUI отвечает.
Если ты хочешь просто камеру и портрет - импортировать их под одним именем, но второй модели приписать _portrait. Хочешь одной моделью - сделать камеру в camera manager во вкладке окна. Там все интуитивно. Если именно объединить модели, то такой функционал был у одной утилицы с хайва, но нужна еще ручная настройка и это совсем не в модел эдиторе делается. веса от этого не сильно убавится, меш не так много весит обычно как анимации, так что запариваться не советую с этим.
Я импортирую и портрет и модель, Sniper.mdx и Sniper_Portrait.mdx, я их импортирую, но вместо портрета у снайпера случайный ракурс, как и без портрета. Может, кинуть файлы, сам протестишь?
Все, разобрался. Тема закрыта)))~ssbbssc, Не нельзя, просто сама модель очень маленькая а при увеличении ее в игре баф над головой и под моделькой (например аура) становится очень огромным, а модель вроде нормальная
Честно я не знаю меняет родная защита и прочие характеристики юнита при использовании тёмный. Давно не игрался с этим. Да и делал я типа кур. Говорят там только модель меняется. А вот перевоплощение да там могут меняться атрибуты и прочее. Если так то редактируйте этого юнита. И вообще проверяйте сами все
При использовании абилы тёмный сам юнит никуда не удаляется, просто модель меняется (сам даже удалял много ещё) - трудно проверить?
А почему ты не можешь просто сделать так,чтобы предмет с твоей броней просто одевался на героя.Это самый простой вариант,в котором есть только одна проблема-найти/сделать модель этого предмета.
Работаю с ВоВ-моделью. Проще сделать много скинов к ней, как в самой ММО, чем модель брони.
а) Создай 2 переменные-массива по типу "боевая единица" (массив - чтобы для каждого игрока, мы ведь за мультиплеер трем, прально?), назови типа MyChampion и MyChampionDummy.
б) подготовь невидимого героя-пустышку с нужной тебе иконкой, убери ману, если у чемпиона ее нет. Убери ему радиус обзора, убери галочки типа "отмечать на мини-карте" - остальные - опционально.
В дальнейшем мы будем синхронизировать пустышку и реального чемпиона, создавая видимость одной боевой единицы.
Итак, наш первый триггер:
в) Отследи первое появление чемпиона, когда это случится - создай для игрока героя-пустышку. Соответственно сделай MyChampion [number of (Owner of trained unit)]= last trained unit, следующей строчкой создай того самого героя-пустышку для (owner of trained unit) и сделай MyChampionDummy = last created unit. Теперь мы прочно связали этих чуваков. Этот же триггер запускает остальные.
г) Отслеживание здоровья. Сделай изначально выключенный цикличный триггер, там, каждые 0.3 секунды. Триггер запускается пунктом в). Каждые 0.3 секунды меняй здоровье героя (чья икона висит, надо чтобы она соответствовала, прально?) в % на здоровье самого чемпиона.
д) пропищи событие, мол, если выбирает игрок своего героя (кликая на иконку) выбирается чемпион
е) убивай героя вместе с чемпионом
ж) отключай триггеры с проверкой и выбором, пока чемпион мертв
з) не забывай обновлять переменную чемпиона с каждым новым чемпионом.
должен сразу предупредить что делать за тебя никто не будет
теперь по твоим вопросам
чтобы нельзя было кликать скрываешь, даёшь москиты, делаешь видимым
действие проиграть звук и указываешь твою фразу
выбираем всех подходящих(враги,живые) юнитов в радиусе от точки каста и создаём по дамми юниту(юнит без модели, без атаки, с москитами, с нужной способность, время жизни юнита 1 сек) для каждого подходящего юнита приказывая дамми юниту применить нужную способность в подходящего юнита
таким образом каждый дамми юнит применит нужную способность (в твоём случае корни) в 1 подходящего юнита для которого он и был создан а потом исчезнет
В моей карте игроки вместе играют на острове "полном жизни". И если крипов по типу волка или медведя не будет на локации, то он окажется слишком уж пустым.
С координатной функцией юнит также завис.(
Решить проблему так и не смог, теперь просто тыкаю юнита-игрока в систему рывков, чтобы тот сбежал от крипа.
Щяс глянул, в этой карте это сделано на невидимых платформах, которые стоят изнчально, юниты с лесницами - импорт, анимация установки лесницы - морф.
Тока он ставит лестницу ( при этом не куда попало, а в отведенное место ) включаются невидимые плятформы которые позволяют идти по стене. Вокруг лестницы блокираторы пути, чтобы юниты не обходили...
» WarCraft 3 / Волны мобов
» WarCraft 3 / Импортирование текстур
» WarCraft 3 / Смена текстуры
» WarCraft 3 / Кости атаки
» WarCraft 3 / Триггер
» WarCraft 3 / Случайный каст
» WarCraft 3 / Партиклы
» WarCraft 3 / Тип дополнительного урона
» WarCraft 3 / Несколько простых вопросов
» WarCraft 3 / Темные ночи
» WarCraft 3 / Ломаются триггеры
» WarCraft 3 / Лимит
» WarCraft 3 / После воскрешения героя пропадает видимость
» WarCraft 3 / Не работает триггер
» WarCraft 3 / Замедление времени
» WarCraft 3 / Защита карты
» WarCraft 3 / Как сделать своего юнита нейтральным?
» WarCraft 3 / Один меч в одни руки
» WarCraft 3 / Область = позиции юнита
» WarCraft 3 / (Редактор карт) Что не так в триггере?
» WarCraft 3 / дроп дерева
» WarCraft 3 / Анимирование модели
» WarCraft 3 / Помощь с триггерами.
» WarCraft 3 / Скрытие стандартных иконок
» WarCraft 3 / Лестница